﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Sireass.Bl;
using Csla;
using Sireass.Asp.Util;
using Telerik.Web.UI;
using log4net;

namespace Sireass.Asp.UserControls
{
    public partial class ucAsignacionProyectoPrestador : System.Web.UI.UserControl
	{
		// Create a logger for use in this class
		private static readonly ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

		#region Page
		protected void Page_Load(object sender, EventArgs e)
        {
           if (!Page.IsPostBack)
           {
				Security.ValidarSeguridad(Response, HttpContext.Current.User.Identity, typeof(AsignacionList));                
				LimpiaControles();
				CargaPrestadores();
				CargaProyectos();				
            }
        }
		#endregion

		#region Botones
		protected void FinishButton_Click(object sender, EventArgs e)
        {
            try
            {
				if (RadGridPrestadores.SelectedItems.Count == 0)
				{
					lblError.Text = "Seleccione al menos un prestador por favor.";
					return;
				}
                if (RadGridProyectos.SelectedItems.Count == 0)
                {
                    lblError.Text = "Seleccione un proyecto por favor.";
                    return;
                }
				AsignacionEditList asignaciones = AsignacionEditList.NewAsignacionEditList();				
                foreach(GridDataItem item in RadGridPrestadores.SelectedItems)
                {
					long idPrestador = Convert.ToInt64(item["IdPrestador"].Text);
                    AsignacionInsertar(idPrestador);
					AsignacionEdit asignacion = asignaciones.AddNew();
					//ToDo: Agregar la lógica a la asignación
                }

				lblExito.Text = "Operación realizada con éxito";
				Response.Redirect("~/Asignaciones/AsignarProyectoAPrestador.aspx");
            }
            catch (Exception ex)
			{ 
                lblError.Text = "Ocurrió un error realizar la asignacion. Inténtelo de nuevo por favor.";
				if (log.IsDebugEnabled)
				{
					log.Debug("ex: " + ex.Message);
					log.Debug("ex stack trace: " + ex.StackTrace);
				}
            }        
        }

		protected void StepNextButton_Click(object sender, EventArgs e)
		{
			CargaEncargados();
			foreach (GridDataItem item in RadGridProyectos.Items)
			{
				CheckBox chk = (CheckBox)item["ColumaChecked"].Controls[0];
				if (chk.Checked)
				{
					radTxtClave.Text = item["ClaveProyecto"].Text;
					radTxtProyecto.Text = item["Proyecto"].Text;
					break;
				}				
			}			
		}
		#endregion

		#region Métodos
		private void CargaPrestadores()
		{
			PrestadorCriteria criteria = new PrestadorCriteria(null, null, null, null, (byte)Enums.EstatusPrestador.PorAsignar, null, true, null, null);
			RadGridPrestadores.DataSource = PrestadorList.GetPrestadorList(criteria);
			RadGridPrestadores.DataBind();
		}

		private void CargaProyectos()
		{
			RadGridProyectos.DataSource = ProyectoList.GetProyectoList();
			RadGridProyectos.DataBind();
		}

		private void CargaEncargados()
		{
			long idProyecto = (long)RadGridProyectos.SelectedValue;
			ProyectoEncargadoCriteria criteria = new ProyectoEncargadoCriteria(null, idProyecto, null, true, null, null);
			radCmbEncargados.DataSource = ProyectoEncargadoList.GetProyectoEncargadoList(criteria);
			radCmbEncargados.DataBind();
		}

		private void LimpiaControles()
		{
			radCmbEncargados.ClearSelection();
			rdpFechaFinAsignacion.Clear();
			rdpFechaInicioAsignacion.Clear();
			lblError.Text = string.Empty;
			lblExito.Text = string.Empty;
		}

		protected void AsignacionInsertar(long idPrestador)
		{
			AsignacionEdit asignacion = AsignacionEdit.NewAsignacionEdit();
			asignacion.IdPrestador = idPrestador;
			asignacion.IdProyecto = Convert.ToInt64(RadGridProyectos.SelectedValue);
			asignacion.IdEncargadoProyecto = Convert.ToInt64(radCmbEncargados.SelectedValue);			
			//asignacion.IdEstatus = (int)Enums.EstatusAsignacion.Activa;
			asignacion.FechaInicioAsignacion = rdpFechaInicioAsignacion.SelectedDate.Value;
			asignacion.FechaFinAsignacion = rdpFechaFinAsignacion.SelectedDate.Value;
			asignacion.HorasPorAplicar = Convert.ToInt16(radHorasPorAplicar.Text);
			//asignacion.Habilitado = true;
			asignacion.Save();
		}
		#endregion
    }
}